package 课程设计报告_hb_7_9;

import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

/**
 * @author Jiang Zhiyan
 *
 * 2021年7月9日 上午9:13:38
 *
 */

/**
 * 
 * 实现一个记事本的功能
 * 
 * 从控制台中输入内容，将内容写入到文件note.txt中
 *
 * 1. 在控制台中输入的过程中，每隔5s将内容写入到文件中 (一个读取数据的线程，一个写的线程)
 *
 * 2. 输入Q 退出输入状态
 *
 * 2021-07-09 09:03:03
 *
 */

public class txtTest {

		public static void main(String[] args) {
			Deque<String> list = new LinkedList<String>();
			// 读取数据的线程
			Thread read = new Thread() {	
				@Override
				public void run() {
					Scanner sc = new Scanner(System.in);
					while (true) {
						String data = sc.next();
						if("Q".equalsIgnoreCase(data)) {
							break;
						}
						//将data缓存到集合中
						 list.add(data);	
				}
			}
			};

			Thread write = new Thread() {
				@Override
				public void run() {
						try(
					FileOutputStream fos =new  FileOutputStream("note.txt",false);
					PrintWriter ow = new PrintWriter(fos,true,StandardCharsets.UTF_8); 
								){
							while (true) {
								// 每隔5s执行写的功能
								Thread.sleep(5000);
								//从集合中获取数据，写入到note.txt文件中
								while(!list.isEmpty()) {
									ow.println(list.removeFirst());
								}
								ow.flush();
						}}
						catch(Exception e) {
							e.printStackTrace();
						}
					
				}
			};
//			将write设为后台线程
			write.setDaemon(true);
			read.start();
			write.start();
		}

}
